package leetcode;

/**
 * @Classname RemoveElement0027
 * @Author happytaohaha
 * @Date 2020/3/1
 * @Description 移除元素
 * 思路：
 * 1.双指针法 交换当前与val的值与最后倒数的值进行比较并交换,别管效率先实现  O(n)
 * 过是过了, 最难的点是对边界的判断。  1. 全部都是要找的数  2. 要找的数都在前边  3. 要找的数都在右边
 *
 * 2.跟上一道题的思路一样的解法， 快慢指针
 *
 */
public class RemoveElement_0027 {
    public static int removeElement(int[] nums, int val) {
        int len = nums.length;
        int j = len - 1;
        for (int i = 0; i <= j; i++) {
            if (nums[i] == val) {
                //限制全部都是要找的数
                while (i <= j && nums[j] == val) {
                    //j为不一样值的下标
                    j--;
                }
                if (i < j) {
                    nums[i] = nums[j];
                    j--;
                }

            }
        }
        return j + 1;
    }


    public int removeElement2(int[] nums, int val) {
        int i = 0;
        for (int j = 0; j < nums.length; j++) {
            if (nums[j] != val) {
                nums[i] = nums[j];
                i++;
            }
        }
        return i;
    }


    public static void main(String[] args) {
        System.out.println(removeElement(new int[]{1,1,5}, 1));
    }
}
